﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ControlsLib.Filters;
using GestionePolveriLib.BL.Filters;
using GestionePolveriLib.Facades;
using GestionePolveriLib.BL;
using GestionePolveriLib.BL.FilterBags;
using GestionePolveriLib.Utilities;

namespace GestionePolveri2.Filters
{
    public partial class ComposizioneColoreManagerExtFilter : ComposizioneColoriExtFilterBase
    {
        public ComposizioneColoreManagerExtFilter()
        {
            InitializeComponent();

            if (!DesignMode)
            {
                RefreshData();

                this.FromDate = DateTime.Now;
                this.ToDate = DateTime.Now;

                this.rbPLOnly.Tag = PianoLavori.PianoLavoriOnly;
                this.rbPLTutte.Tag = PianoLavori.Tutte;

                this.rbPolveriAll.Tag = PolvereTypes.Tutte;
                this.rbPolveriNormali.Tag = PolvereTypes.Normali;
                this.rbPolveriXXXX.Tag = PolvereTypes.XXXX;

                this.rbIndicazioneTutte.Tag = IndicazionePolvere.Tutte;
                this.rbIndicazioneUfficiali.Tag = IndicazionePolvere.Ufficiale;
                this.rbIndicazioniSuperate.Tag = IndicazionePolvere.Superata;

                this.rbPolveriNormali.Checked = true;
                this.rbIndicazioneUfficiali.Checked = true;
                this.rbPLOnly.Checked = true;

                OperatorePrincipal m_OperatorePrincipale = (OperatorePrincipal)System.Threading.Thread.CurrentPrincipal;
                //if (m_OperatorePrincipale.IsInRole("Produzione"))
                //{
                    //this.grbxIndicazionePolvere.Visible = false;
                    //this.chkCmbApplicazione.Enabled = false;
                    //this.cmbPolveri.Enabled = false;
                    //this.cmbFornitori.Enabled = false;
                    //this.groupBox3.Visible = false;
                //}
            }
        }

        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);

            RefreshData();

            this.rbPLOnly.Tag = PianoLavori.PianoLavoriOnly;
            this.rbPLTutte.Tag = PianoLavori.Tutte;

            this.rbPolveriAll.Tag = PolvereTypes.Tutte;
            this.rbPolveriNormali.Tag = PolvereTypes.Normali;
            this.rbPolveriXXXX.Tag = PolvereTypes.XXXX;

            this.rbIndicazioneTutte.Tag = IndicazionePolvere.Tutte;
            this.rbIndicazioneUfficiali.Tag = IndicazionePolvere.Ufficiale;
            this.rbIndicazioniSuperate.Tag = IndicazionePolvere.Superata;

            this.rbPolveriNormali.Checked = true;
            this.rbIndicazioneUfficiali.Checked = true;
            this.rbPLOnly.Checked = true;
        }

        private void LoadApplicazione()
        {
            chkCmbApplicazione.Properties.Items.Clear();

            chkCmbApplicazione.Properties.Items.Add("b", "Base");
            chkCmbApplicazione.Properties.Items.Add("v", "Venatura");
        }

        private void LoadPolveri()
        {
            FilterComboBoxHelper.SetupPolveriComboBox(this.cmbPolveri);
        }

        public void LoadColori()
        {
            FilterComboBoxHelper.SetupColoriComboBox(this.cmbColori);
        }

        private void LoadFornitori()
        {
            FilterComboBoxHelper.SetupFornitoriComboBox(this.cmbFornitori);
        }

        private void LoadTipologiaSM()
        {
            FilterComboBoxHelper.SetupTipologieSMPComboBox(this.cmbTipologiaSM);
        }

        private void LoadFamiglie()
        {
            FamigliaColoriFacade pf = new FamigliaColoriFacade();

            pf.RunAsync(() => pf.GetAll(), (result) =>
            {
                if (result != null)
                {
                    this.chkCmbFamiglia.Properties.Items.Clear();

                    this.chkCmbFamiglia.Properties.DisplayMember = "Descrizione";
                    this.chkCmbFamiglia.Properties.ValueMember = "ID";
                    this.chkCmbFamiglia.Properties.DataSource = result;
                }
            });
        }

        protected override void OnResetFilter(EventArgs e)
        {
            this.rbPLOnly.Checked = true;

            this.chkCmbApplicazione.DeselectAll();
            this.chkCmbApplicazione.SetEditValue(null);

            this.chkCmbFamiglia.DeselectAll();
            this.chkCmbFamiglia.SetEditValue(null);
            this.chkCmbFamiglia.Text = "Seleziona un famiglia";

            FilterBag.Famiglia = null;
            FilterBag.IDColore = -1;
            FilterBag.CodicePolvere = null;
            FilterBag.Fornitore = null;
            FilterBag.Applicazione = null;
            FilterBag.TipologiaSM = null;

            FilterBag.Tipo = PolvereTypes.Normali;
            FilterBag.IndicazionePolvere = IndicazionePolvere.Ufficiale;
            FilterBag.Pianolavori = PianoLavori.PianoLavoriOnly;

            this.cmbColori.SelectedIndex = -1;
            this.cmbFornitori.SelectedIndex = -1;
            this.cmbPolveri.SelectedIndex = -1;
            this.cmbTipologiaSM.SelectedIndex = -1;

            this.rbPolveriNormali.Checked = true;
            this.rbIndicazioneUfficiali.Checked = true;
            this.rbPLOnly.Checked = true;

            OperatorePrincipal m_OperatorePrincipale = (OperatorePrincipal)System.Threading.Thread.CurrentPrincipal;
            //if (m_OperatorePrincipale.IsInRole("Produzione"))
            //{
            //    FilterBag.IndicazionePolvere = IndicazionePolvere.Ufficiale;
            //    FilterBag.Applicazione = "b";
            //}

            base.OnResetFilter(e);
        }

        protected override void OnExecuteFilter(EventArgs e)
        {
            FilterBag.UseDates = false;

            //if (this.cmbColori.SelectedItem == null)
            //    this.cmbColori.SelectedIndex = -1;
            //if (this.cmbPolveri.SelectedItem == null)
            //    this.cmbPolveri.SelectedIndex = -1;
            //if (this.cmbFornitori.SelectedItem == null)
            //    this.cmbFornitori.SelectedIndex = -1;

            Polvere polvereSelected = FilterComboBoxHelper.GetSelectedItem<Polvere>(this.cmbPolveri);
            Colore coloreSelected = FilterComboBoxHelper.GetSelectedItem<Colore>(this.cmbColori);
            Fornitore fornitoreSelected = FilterComboBoxHelper.GetSelectedItem<Fornitore>(this.cmbFornitori);
            TipologiaScortaMinima tipologiaSMSelected = FilterComboBoxHelper.GetSelectedItem<TipologiaScortaMinima>(this.cmbTipologiaSM);

            FilterBag.PeriodFrom = this.FromDate;
            FilterBag.PeriodTo = this.ToDate;
            FilterBag.IDColore = (coloreSelected == null ? -1 : ((Colore)this.cmbColori.SelectedItem).ID);
            FilterBag.CodicePolvere = (polvereSelected == null ? null : ((Polvere)this.cmbPolveri.SelectedItem).CodicePolvere);
            FilterBag.Fornitore = (fornitoreSelected == null ? null : ((Fornitore)this.cmbFornitori.SelectedItem).Descrizione);
            FilterBag.TipologiaSM = (tipologiaSMSelected == null ? null : ((TipologiaScortaMinima)this.cmbTipologiaSM.SelectedItem).Codice);

            FilterBag.Applicazione = (this.chkCmbApplicazione.Properties.GetCheckedItems().ToString() == string.Empty ? null : this.chkCmbApplicazione.Properties.GetCheckedItems().ToString());
            FilterBag.Famiglia = (this.chkCmbFamiglia.Properties.GetCheckedItems().ToString() == string.Empty ? null : this.chkCmbFamiglia.Properties.GetCheckedItems().ToString());

            FilterBag.Tipo = (PolvereTypes)(rbPolveriAll.Checked ? rbPolveriAll.Tag : (rbPolveriNormali.Checked ? rbPolveriNormali.Tag : rbPolveriXXXX.Tag));

            FilterBag.IndicazionePolvere = (IndicazionePolvere)(rbIndicazioneTutte.Checked ? rbIndicazioneTutte.Tag : (rbIndicazioneUfficiali.Checked ? rbIndicazioneUfficiali.Tag : rbIndicazioniSuperate.Tag));

            FilterBag.Pianolavori = (PianoLavori)(rbPLTutte.Checked ? rbPLTutte.Tag : rbPLOnly.Tag);

            OperatorePrincipal m_OperatorePrincipale = (OperatorePrincipal)System.Threading.Thread.CurrentPrincipal;
            //if (m_OperatorePrincipale.IsInRole("Produzione"))
            //{
            //    FilterBag.IndicazionePolvere = IndicazionePolvere.Ufficiale;
            //    FilterBag.Applicazione = "b";
            //}

            if (FilterBag.Famiglia != null)
              FilterBag.Famiglia = FilterBag.Famiglia.Replace(" ", "");

            if (FilterBag.Applicazione != null)
                FilterBag.Applicazione = FilterBag.Applicazione.Replace(" ", "");

            if (
                (this.cmbColori.SelectedIndex == -1) &&
                (this.cmbPolveri.SelectedIndex == -1) &&
                (this.cmbFornitori.SelectedIndex == -1) &&
                (this.cmbTipologiaSM.SelectedIndex == -1) &&
                (FilterBag.IDColore == -1) &&
                (FilterBag.Tipo == PolvereTypes.Normali) &&
                (FilterBag.IndicazionePolvere == IndicazionePolvere.Ufficiale) &&
                (FilterBag.Pianolavori == PianoLavori.PianoLavoriOnly) &&
                (FilterBag.CodicePolvere == null) &&
                (FilterBag.Fornitore == null) &&
                (FilterBag.Applicazione == null) &&
                (FilterBag.Famiglia == null) &&
                (FilterBag.UseDates == false)
              )
            {
                //OnResetFilter(e);
                //this.OnFilterButtonClick();
                base.OnExecuteFilter(e);
            }
            else
            {
                base.OnExecuteFilter(e);
            }

            //base.OnExecuteFilter(e);
        }

        protected override void OnSecurityCheck()
        {
            base.OnSecurityCheck();
        }

        public override void RefreshData()
        {
            LoadPolveri();
            LoadColori();
            LoadFornitori();
            LoadFamiglie();
            LoadApplicazione();
            LoadTipologiaSM();
        }
    }

    public class ComposizioneColoriExtFilterBase : FilterContainerBase2<FormulaFilterBag> { }
}
